public class test {
    public static void mainInt(String[] args) {
        int a = 10;
        System.out.println(a);

        // 局部变量在使用时，必须赋值，体现了java的安全性
        int b;
        b = 19;
        System.out.println(b);

        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
    }

    public static void mainLong(String[] args) {
        long a = 10L;
        System.out.println(a);
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
    }

    public static void mainShort(String[] args) {
        short a = 10;
        System.out.println(a);
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
    }

    public static void mainByte(String[] args) {
        byte a = 127;
        System.out.println(a);
        System.out.println(Byte.MAX_VALUE);
        System.out.println(Byte.MIN_VALUE);
    }

    public static void mainChar(String[] args) {
        char a = 'A';
        char b = '张';
        System.out.println(a);
        System.out.println(b);
    }

    public static void mainBoolean(String[] args) {
        boolean flag = true;
        System.out.println(flag);
    }

    public static void main1(String[] args) {
        int a = 10;
        long b = 19L;
        b = a; // 会默认将a提升到long类型，然后赋值，反之则会报错，a=b,long的范围比int的要大。其实本质是数据会丢失，不安全。（隐式类型转换）
    }

    public static void main2(String[] args) {
        int a = 10;
        long b = 19L;
        a = (int) b; // 强制类型转换，必须强转，否则会报错。当然 boolean是不能强转的。
    }

    public static void main3(String[] args) {
        int a = 10;
        long b = 20L;
        //int c = a+b; 会报错 因为两者相加，会导致类型提升。
        long c = a + b;
        int d = (int) (a + b);
        System.out.println(c);
        System.out.println(d);
    }

    public static void main4(String[] args) {
        byte a = 10;
        byte b = 20;
        //byte c = a + b; 会报错，所有小于四个字节的都会提升到四个字节。
        int c = a + b;
        byte d = (byte) (a + b);
        System.out.println(c);
        System.out.println(d);
    }

    public static void main5(String[] args) {
        String str = "hello"; // 不以任何东西结尾，不像c语言。
        String str2 = "345";
//        int val = Integer.valueOf(str2);
        int val = Integer.parseInt(str2);
        System.out.println(str);
        System.out.println(str.length());
        System.out.println(val);

        int a = 100;
        String str3 = String.valueOf(a);
        System.out.println(str3);
    }

    public static void main6(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("a=" + a + "b=" + b);
        System.out.println("a+b=" + a + b);
        System.out.println(a + b + "a+b");
        // +： 这是拼接 。注意拼接的顺序，先是字符串还是 先是数据运算
    }

    public static void main7(String[] args) {
        System.out.println(5 / 2);
        System.out.println((float) 5 / 2);
        System.out.println((5 / (float) (2)));
        System.out.println((float) (5 / 2));
    }

    public static void main8(String[] args) {
        System.out.println(10 % 3);
        System.out.println(-10 % 3);
        System.out.println(10 % -3);
        System.out.println(-10 % -3);
    }

    public static void main9(String[] args) {
        System.out.println(11.5 % 2);
        int a = 1;
        a += 2;
        System.out.println(a);
        int b = 4;
        double c = 5.0;
        b += c;
        System.out.println(b); // 为啥是9 原因是因为 += 自动进行转换  a= (int)(a+d)
    }

    public static void main10(String[] args) {
        int a = 10;
//        int b = a++;  // a++是先用在加 ++a是先加再用
        int b = ++a;  // a++是先用在加 ++a是先加再用
        System.out.println(b);
        System.out.println(a);
    }

    public static void main11(String[] args) {
        int a = 10;
//        a = a++;// 了解 此时打印a的值是10，注意和C里面的区别，C里面是11
        int b = 20;
        System.out.println(a);
        System.out.println(a == b); // 关系运算符
        System.out.println(a == 1 && b == 2);  // 逻辑运算符
        System.out.println(!(a == 1));  // 逻辑！运算符只能和boolean类型进行运算
    }

    public static void main(String[] args) {
        boolean flag1 = true == true ? false ? true : false : true;  // 这是三目运算符的套娃，注意拆解。这个符号一定是需要赋值的
        System.out.println(flag1);
    }
}
